package com.zbkj.front.service.fund;

import com.zbkj.dal.base.page.CommonPage;
import com.zbkj.dal.pojo.request.PageParamRequest;
import com.zbkj.dal.pojo.vo.MyRecord;
import com.zbkj.front.model.vo.LastRecordMonthVO;
import com.zbkj.front.model.vo.QuotaOrderInfoVO;
import com.zbkj.service.model.front.req.fund.CrabRoeFundFlowReq;
import com.zbkj.service.model.front.req.fund.WithdrawApplyReq;
import com.zbkj.service.model.front.vo.fund.CrabRoeAccountVO;
import com.zbkj.service.model.front.vo.fund.MonthCrabRoeVO;
import com.zbkj.service.model.front.vo.fund.WithdrawDetailVO;
import com.zbkj.service.model.front.vo.user.*;

import java.util.List;

public interface FrontFundV2Service {

    /**
     * 用户资金账户信息
     *
     * @return {@link UserQuotaInfoVO}
     */
    UserFundAccountVO userFundAccount();

    /**
     * 查询用户雅识账户
     *
     * @return {@link CrabRoeAccountVO}
     */
    CrabRoeAccountVO userCrabRoeAccount();

    /**
     * 用户额度信息
     *
     * @return {@link UserQuotaInfoVO}
     */
    UserQuotaInfoVO userUserQuotaInfo();

    /**
     * 雅识资金流水
     *
     * @param req req
     * @return {@link CommonPage}<{@link FundFlowVO}>
     */
    CommonPage<FundFlowVO> crabRoeFundFlow(CrabRoeFundFlowReq req);

    /**
     * 月份雅识信息
     *
     * @param month 月
     * @return {@link MonthCrabRoeVO}
     */
    MonthCrabRoeVO monthCrabRoeFlow(String month);

    /**
     * 提现申请
     *
     * @param req req
     */
    String withdrawApply(WithdrawApplyReq req);

    /**
     * 等级计算额度流水
     *
     * @param req req
     * @return {@link CommonPage}<{@link FundFlowVO}>
     */
    CommonPage<QuotaFundFlowVO> totalQuotaFundFlow(PageParamRequest req);

    /**
     * 可用额度流水
     *
     * @param req req
     * @return {@link CommonPage}<{@link FundFlowVO}>
     */
    CommonPage<QuotaFundFlowVO> availableQuotaFundFlow(PageParamRequest req);

    LastRecordMonthVO lastRecordMonth();

    /**
     * 最近雅识流水
     *
     * @return {@link List}<{@link CurrentFundFlowVO}>
     */
    List<CurrentFundFlowVO> currentFundFlow();

    WithdrawDetailVO withdrawDetail(String withdrawNo);
}
